1. Field of the Invention
The present invention is generally directed toward balancing a request load on communication channels. More specifically, the present invention relates to balancing a request load placed on redundant communication channels to a plurality of storage devices.
2. Discussion of Related Art
Load balancing is a method of distributing a load among a number of resources. In the data storage arts, load balancing occurs in storage systems having multiple storage controllers to process requests received from attached host systems and to manipulate data stored on storage devices, such as computer disk drives. Load balancing is especially important for storage systems where it's difficult to predict the number of requests or the size of the requests that will be issued. In such storage systems, multiple requests may be received by the storage system and processed by one of the storage controllers of the storage system. Some storage controllers of the storage system may receive more requests than others. Unbalanced requests among the storage controllers can burden a storage system and diminish overall, aggregate storage processing capabilities of the storage system. To improve the storage processing capabilities of the storage system, the storage system balances request loads from the host systems to the controllers by evenly distributing the requests to each controller of the storage system.
Load balancing of the storage system improves processing speeds of the requests and alleviates request “bottlenecks”. However, modern storage systems may also employ redundant communication channels for exchange of information between the storage controller(s) and the storage devices. The redundant communication channels are necessary in the event that one of the channels becomes disabled. As one channel becomes disabled, the other channel can be used to provide communications for the system. When not required to replace a disabled channel the other channel is often left essentially unused—merely in a “ready” state to be substituted for a disabled channel. However, the redundant channels may also be used to supplement available communications bandwidth for the system. For example, a storage system having multiple channels connected to multiple disks can process more requests than a storage system having a single channel. Rather than leave a redundant channel essentially idle, its additional bandwidth capability may be used to supplement the available bandwidth of the other channel(s).
Use of the redundant channels to supplement communications can create request load imbalances on the channels. Presently, systems, such as storage systems, have redundant channels for reliability purposes and utilize the additional available bandwidth for supplemental communications with the storage devices. Low level I/O operations to be directed to particular disk drives are randomly or arbitrarily assigned to one of the redundant channels. However, arbitrary assignments of requests to the channels eventually create either the same or slightly improved performance of a single channel. For example, as the channels are used in parallel to transfer more arbitrary requests, bottlenecks form in the channels because of random selection of the requests directed to each channel. Such performance bottlenecks severely impair request processing of the system, as the system must wait for particular requests to clear through the channels. Many systems cannot afford the luxury of having impaired request processing.
As evident from the above discussion, a need exists for improved structures and methods for allocating requests through communication channels so as to provide more reliable request processing.